package com.wish.aio;

import com.wish.common.MyUtils;

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;
import java.util.Date;

/**
 * @author tantexian
 * @since 2016/7/9
 */
public class AIOSimpleClient {
    public static void main(String... args) throws Exception {
        AsynchronousSocketChannel client = AsynchronousSocketChannel.open();
        client.connect(new InetSocketAddress(MyUtils.getDefaultServerAddr(), MyUtils.getDefaultPort()));
        //System.out.println(client.isOpen());



        //client.write(ByteBuffer.wrap(("test" + new Date()).getBytes())).get();
       /* for (int i = 0; i < 100; i++) {
            ByteBuffer byteBufferWrite = ByteBuffer.allocate(1024);
            byteBufferWrite.put(("AIOSimpleClient" + new Date()).getBytes());
            byteBufferWrite.flip();
            client.write(byteBufferWrite);
        }*/

        /**
         * 使用Buffer读写数据一般遵循以下四个步骤：
         * 1、写入数据到Buffer
         * 2、调用flip()方法
         * 3、从Buffer中读取数据
         * 4、调用clear()方法或者compact()方法
         * 当向buffer写入数据时，buffer会记录下写了多少数据。一旦要读取数据，需要通过flip()方法将Buffer从写模式切换到读模式。
         * 在读模式下，可以读取之前写入到buffer的所有数据。
         * 一旦读完了所有的数据，就需要清空缓冲区，让它可以再次被写入。有两种方式能清空缓冲区：调用clear()或compact()方法。
         * clear()方法会清空整个缓冲区。compact()方法只会清除已经读过的数据。
         * 任何未读的数据都被移到缓冲区的起始处，新写入的数据将放到缓冲区未读数据的后面。
         *
         */
        ByteBuffer byteBufferWrite = ByteBuffer.allocate(1024);
        String msg = "AIOSimpleClient---1 " + new Date();
        byteBufferWrite.put(msg.getBytes());
        byteBufferWrite.flip();
        Integer integer = client.write(byteBufferWrite).get();
        if(integer == msg.length()){
            System.out.println("The msg has send success: [" + msg + "]");
        }


        byteBufferWrite.clear();
        byteBufferWrite.put(("AIOSimpleClient---3 " + new Date()).getBytes());
        byteBufferWrite.flip();
        integer = client.write(byteBufferWrite).get();

        if(integer == msg.length()){
            System.out.println("The msg has send success: [" + msg + "]");
        }

        ByteBuffer byteBufferWrite1 = ByteBuffer.allocate(1024);
        byteBufferWrite1.put(("AIOSimpleClient2 " + new Date()).getBytes());
        byteBufferWrite1.flip();
        client.write(byteBufferWrite).get();

    }
}
